// DivideApple.cpp
#include <vector>
#include <iostream>

using namespace std;

// {3, 2, 7, 4, 1} 其中的每个元素表示一个苹果的重量
// 我们要把苹果分成两堆
// 让这两堆的重量差最小
// group1: 3, 2, 4
// group2: 7, 1
// 重量差： 1
// 写一个函数，接受一个 vector<int>，返回最小重量差

vector<int> apples {3, 2, 7, 4, 1, 4, 3, 3, 3, 1};

// 返回最小重量差
// lw: left weight
// rw: right weight
// n: 当前已经分好的苹果数量
int divide_apple(int lw, int rw, int n) {
  if (n == apples.size()) {
    return abs(lw - rw); // 当前分法的重量差
  }

  // 继续分解
  int l = divide_apple(lw + apples[n], rw, n + 1);
  int r = divide_apple(lw, rw + apples[n], n + 1);

  return min(l, r);
}


int main(int argc, char const *argv[])
{
  /* code */
  // 用来查找一个数组里和目标值相等的元素的个数
  // count 的第二个函数是不包含的
  int fours = count(apples.begin(), apples.end(), 3); // 在整个 apples 数组中，查 元素 4 的个数
  cout<<fours<<endl;
  cout<<divide_apple(0, 0, 0)<<endl;
  return 0;
}
